home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / DJGPP / grasm.c < prev    next >
C/C++ Source or Header  |  1979-12-31  |  3KB  |  193 lines

  1. /* --------------------------------- grasm.c -------------------------------- */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* Vga graphics driver (direct video access, 256 colors only).
  8. */
  9.  
  10. #include "fly.h"
  11. #include "grdj.h"
  12.  
  13. #include <graphics.h>
  14. #include <pc.h>
  15. #include <dos.h>
  16.  
  17.  
  18. #define DOSYNC        0x0001
  19. #define BIGPAGE        0x0006
  20. #define GRF_STATS    (GR_TYPES+1)
  21. #define INITED        0x1000
  22.  
  23. LOCAL_FUNC int FAR
  24. GraSetActive (int page)
  25. {
  26.     SetActiveBase (page * (long)GrSizeY() * (long)GrSizeX());
  27.     return (0);
  28. }
  29.  
  30. LOCAL_FUNC int FAR
  31. GraSetVisual (int page)
  32. {
  33.     if (CS->device->flags & DOSYNC) {
  34.         while (inportb (0x3da) & 0x01)    /* wait for Display Enabled */
  35.             sys_poll (20);
  36.     }
  37.     SetVisualBase ((long)page * (long)GrSizeX() * (long)GrSizeY());
  38.     if (CS->device->flags & DOSYNC) {
  39.         while (inportb (0x3da) & 0x08)    /* wait for Vert Sync*/
  40.             sys_poll (21);
  41.         while (!(inportb (0x3da) & 0x08)) /* wait for Vert Sync end */
  42.             sys_poll (22);
  43.     }
  44.     return (0);
  45. }
  46.  
  47. LOCAL_FUNC int FAR
  48. GraSetPalette (int index, long c)
  49. {
  50.     GrSetColor (index, C_RGB_R (c), C_RGB_G (c), C_RGB_B (c));
  51.     return (0);
  52. }
  53.  
  54. LOCAL_FUNC int FAR
  55. GraGetOptions (char *options)
  56. {
  57.     char    *p;
  58.     int    ret = 0;
  59.     long    temp;
  60.  
  61.     if (F(p = get_piarg (options, 1)))
  62.         return (1);
  63.     if (!stricmp (p, "et4k"))
  64.         Gr->flags |= GR_TYPE_T4K;
  65.     else if (!stricmp (p, "vesa"))
  66.         Gr->flags |= GR_TYPE_VESA;
  67.     else {
  68.         LogPrintf ("Bad video type %s\n", p);
  69.         ret = 1;
  70.     }
  71.     free (p);
  72.  
  73.     if (get_arg (options, "stats"))
  74.         Gr->flags |= GRF_STATS;
  75.  
  76.     if (get_narg (options, "shutters=", &temp))
  77.         st.misc[7] = (int)temp;
  78.     else
  79.         st.misc[7] = 0;
  80.  
  81.     return (ret);
  82. }
  83.  
  84. LOCAL_FUNC int FAR
  85. GraSetBiosMode (int n)
  86. {
  87.     union REGS    regs;
  88.  
  89.     if (n >= 0x100) {
  90.         regs.x.ax = 0x4f02;
  91.         regs.x.bx = n;
  92.     } else
  93.         regs.x.ax = n;
  94.     return (int86 (0x10, ®s, ®s));
  95. }
  96.  
  97. LOCAL_FUNC int FAR
  98. GraInit (DEVICE *dev, char *options)
  99. {
  100.     int    i;
  101.  
  102.     if (GraGetOptions (options))
  103.         return (1);
  104.  
  105.     if (dev->sizex == 0 || dev->sizey == 0)
  106.         return (1);
  107.  
  108.     InitGr (GR_width_height_graphics, dev->sizex, dev->sizey);
  109.  
  110. #if 1
  111.     if (dev->mode > 0)
  112.         GraSetBiosMode (dev->mode);
  113. #endif
  114.  
  115.     for (i = 0; i++ < 256 && GrAllocCell () >= 0;)    /* get 2-255 */
  116.         ;
  117.  
  118.     bSetWriteMode (T_MSET);
  119.     GraSetPalette (CC_BLACK, C_BLACK);
  120.     for (i = 0; i < dev->npages; ++i) {
  121.         GraSetActive (i);
  122.         bScrClear (0, 0, dev->sizex, dev->sizey, st.colors[CC_BLACK]);
  123.     }
  124.  
  125.     GraSetVisual (0);
  126.     GraSetActive (0);
  127.  
  128.     Gr->flags |= INITED;
  129.  
  130.     return (0);
  131. }
  132.  
  133. LOCAL_FUNC void FAR
  134. GraTerm (DEVICE *dev)
  135. {
  136.     if (!(Gr->flags & INITED))
  137.         return;
  138.     Gr->flags &= ~INITED;
  139.  
  140.     if (Gr->flags & GRF_STATS)
  141.         LogStats ();
  142.  
  143.     InitGr (GR_default_text, 0, 0);
  144.     GraSetBiosMode (0x03);
  145. }
  146.  
  147. #if 0
  148. LOCAL_FUNC void FAR
  149. GraClear (SCREEN *scr)
  150. {
  151.     bScrClear (scr->minx, scr->miny, scr->sizex, scr->sizey, scr->BgColor);
  152. }
  153. #endif
  154.  
  155. LOCAL_FUNC int FAR
  156. GraShutters (int eye)
  157. {
  158.     if (st.misc[7]) {
  159.         if (eye >= 0)
  160.             outportb (st.misc[7]+4, 1+2*eye);
  161.         else if (-1 == eye)
  162.             outportb (st.misc[7]+4, 1);        /* on */
  163.         else if (-2 == eye)
  164.             outportb (st.misc[7]+4, 0);        /* off */
  165.         return (0);                /* have shutters */
  166.     } else
  167.         return (1);                /* no shutters */
  168. }
  169.  
  170. struct GrDriver NEAR GrASM = {
  171.     "GrASM",
  172.     0,
  173.     NULL,    /* extra */
  174.     0,
  175.     GraInit,
  176.     GraTerm,
  177.     bMoveTo,
  178.     bDrawTo,
  179.     GraSetVisual,
  180.     GraSetActive,
  181.     0,    /* Clear() too slow */
  182.     bSetWriteMode,
  183.     GraSetPalette,
  184.     bDrawEllipse,
  185.     0,    /* Flush */
  186.     GraShutters
  187. };
  188.  
  189. #undef DOSYNC
  190. #undef BIGPAGE
  191. #undef GRF_STATS
  192. #undef INITED
  193.